/**
 * Mock数据使用示例
 * 展示如何在项目中使用模拟数据
 * @author LYC
 * @date 2025-09-16
 */

import { useChatStore } from '@/store/chat'
import { useUserStore } from '@/store/user'
import { useContactStore } from '@/store/contact'
import { getInitialChatData, generateContacts, generateContactData } from './index'

/**
 * 使用模拟数据初始化应用
 * 在开发环境中调用此函数来填充聊天和用户数据
 * @returns Promise<void>
 */
export const initializeWithMockData = async (): Promise<void> => {
  try {
    const userStore = useUserStore()
    const chatStore = useChatStore()
    const contactStore = useContactStore()

    console.log('===== 开始使用新的模拟数据初始化应用 =====')

    // 确保完全清空现有数据
    console.log('清除现有数据...')
    if (typeof chatStore.clearContacts === 'function') {
      chatStore.clearContacts()
    } else {
      // 如果没有clearContacts方法，手动清空数据
      console.log('clearContacts方法不存在，手动清空数据...')
      // 清空联系人
      if (Array.isArray(chatStore.contacts)) {
        chatStore.contacts.splice(0, chatStore.contacts.length)
      }

      // 清空会话
      if (Array.isArray(chatStore.sessions)) {
        chatStore.sessions.splice(0, chatStore.sessions.length)
      }

      // 清空消息
      if (chatStore.messages instanceof Map) {
        chatStore.messages.clear()
      }

      // 重置激活会话
      if (chatStore.activeSessionId !== undefined) {
        chatStore.activeSessionId = null
      }
    }

    // 清空联系人store的数据
    contactStore.clearContacts()

    // 初始化模拟数据
    console.log('加载新的模拟数据...')
    const mockData = getInitialChatData()
    const contactData = generateContactData()

    // 设置当前用户
    console.log('设置当前用户:', mockData.currentUser.nickname)
    userStore.setUser(mockData.currentUser)

    // 初始化聊天数据
    console.log(`添加 ${mockData.contacts.length} 个聊天联系人...`)
    mockData.contacts.forEach((contact) => {
      chatStore.addContact(contact)
    })

    // 初始化会话数据
    console.log(`添加 ${mockData.sessions.length} 个会话...`)
    mockData.sessions.forEach((session) => {
      chatStore.addSession(session)

      // 如果有预先定义的消息历史，加载它们
      const messageHistory = mockData.messageHistories[session.id]
      if (messageHistory) {
        console.log(`为会话 ${session.name} 添加 ${messageHistory.length} 条消息历史`)
        messageHistory.forEach((message) => {
          chatStore.addMessage(session.id, message)
        })
      }
    })

    // 初始化联系人数据
    console.log(`添加 ${contactData.contacts.length} 个联系人到联系人列表...`)
    contactStore.setContacts(contactData.contacts)

    // 不再需要禁用内置的initMockData方法，因为我们已经修改了它
    console.log('内置的initMockData方法已经被修改为使用我们的模拟数据')

    console.log('===== 模拟数据初始化完成 =====')
    // 不返回store实例，避免类型问题
  } catch (error) {
    console.error('初始化模拟数据时出错:', error)
    throw error
  }
}

/**
 * 示例：处理发送新消息
 * @param receiverId 接收者ID
 * @param content 消息内容
 * @param type 消息类型
 */
interface MockMessage {
  id: string
  senderId: string
  receiverId: string
  content: string
  type: 'text' | 'image' | 'file' | 'voice' | 'video'
  timestamp: Date
  status: 'sending' | 'sent' | 'delivered' | 'read'
}

export const sendMockMessage = (
  receiverId: string,
  content: string,
  type: 'text' | 'image' | 'file' | 'voice' | 'video' = 'text'
): Promise<MockMessage> => {
  const chatStore = useChatStore()

  // 模拟网络延迟
  return new Promise((resolve) => {
    setTimeout(() => {
      // 创建一个新消息
      const newMessage = {
        id: `msg-${Date.now()}`,
        senderId: 'current-user',
        receiverId,
        content,
        type,
        timestamp: new Date(),
        status: 'sending' as const
      }

      // 添加消息到store
      chatStore.addMessage(receiverId, newMessage)

      // 模拟消息状态变更
      setTimeout(
        () => {
          chatStore.updateMessageStatus(newMessage.id, 'sent')

          // 再过几秒模拟已送达
          setTimeout(
            () => {
              chatStore.updateMessageStatus(newMessage.id, 'delivered')
              resolve(newMessage)

              // 如果是XL，模拟自动回复
              if (receiverId === 'xl-user') {
                setTimeout(
                  () => {
                    const autoReply = {
                      id: `msg-reply-${Date.now()}`,
                      senderId: 'xl-user',
                      receiverId: 'current-user',
                      content: getAutoReplyContent(content),
                      type: 'text' as const,
                      timestamp: new Date(),
                      status: 'sent' as const
                    }

                    chatStore.addMessage('xl-user', autoReply)
                  },
                  2000 + Math.random() * 3000
                )
              }
            },
            1000 + Math.random() * 2000
          )
        },
        800 + Math.random() * 1000
      )
    }, 300)
  })
}

/**
 * 获取自动回复内容
 */
const getAutoReplyContent = (originalMessage: string): string => {
  const replies = [
    '收到了，我会尽快处理',
    '好的，没问题',
    '明白了，稍后给你回复',
    '谢谢你的消息',
    '我正在忙，稍后联系你',
    '这个问题我需要再想想',
    '有趣的想法！',
    '我同意你的观点',
    '可以详细说明一下吗？',
    '我会考虑你的建议'
  ]

  if (originalMessage.includes('?') || originalMessage.includes('？')) {
    return '这个问题我需要思考一下，稍后回复你'
  }

  if (originalMessage.length > 30) {
    return '收到你的详细信息，我需要一些时间来处理'
  }

  return replies[Math.floor(Math.random() * replies.length)]
}

/**
 * 模拟接收新消息（用于测试通知功能）
 */
export const simulateIncomingMessage = (
  senderId: string,
  content: string,
  type: 'text' | 'image' | 'file' | 'voice' | 'video' = 'text'
): void => {
  const chatStore = useChatStore()

  const newMessage = {
    id: `msg-incoming-${Date.now()}`,
    senderId,
    receiverId: 'current-user',
    content,
    type,
    timestamp: new Date(),
    status: 'sent' as const
  }

  // 添加消息到store，这会触发通知
  chatStore.addMessage(senderId, newMessage)

  console.log(`模拟收到新消息: ${senderId} - ${content}`)
}

export default {
  initializeWithMockData,
  sendMockMessage,
  simulateIncomingMessage
}
